import Http, {ID, PARAMS} from '@/api/http';
import ListObject from '@/structure/listObject';

/**
 * 基础查询api
 * @param <R> 对象类型
 */
abstract class BaseFindApi<R> extends Http {
  /**
   * 根据ID查询对象
   * @param id ID
   * @return 对象
   */
  public findOne(id: ID): Promise<R> {
    return super.get0(`${this.getBase()}/${id}`);
  }

  /**
   * 根据参数列表查询对象分页列表
   * @param params 参数列表
   * @return 对象分页列表
   */
  public findList(params: PARAMS = {}): Promise<ListObject<R>> {
    return super.get0(this.getBase(), {
      params
    });
  }

  /**
   * 根据参数列表查询对象列表
   * @param params 参数列表
   * @return 对象列表
   */
  public all(params: PARAMS = {}): Promise<R[]> {
    return super.get0(`${this.getBase()}/all`, {
      params
    });
  }

  /**
   * 获取基本url
   * @return 基本url
   */
  protected abstract getBase(): string;
}

export default BaseFindApi;
